> */ public function getNodeTypes() : array { return [FuncCall::class]; } public function refactorWithScope(Node $node, Scope $scope) : ?FuncCall { if (!$node instanceof FuncCall) { return null; } if (!$node->name instanceof Name) { return null; } if ($node->isFirstClassCallable()) { return null; } $functionName = (string) $this->getName($node); try { $reflectionFunction = new ReflectionFunction($functionName); } catch (ReflectionException $exception) { return null; } $callableArgs = []; foreach ($reflectionFunction->getParameters() as $reflectionParameter) { if ($reflectionParameter->getType() instanceof ReflectionNamedType && $reflectionParameter->getType()->getName() === 'callable') { $callableArgs[] = $reflectionParameter->getPosition(); } } $hasChanged = \false; foreach ($node->getArgs() as $key => $arg) { if (!\in_array($key, $callableArgs, \true)) { continue; } if (!$arg->value instanceof String_) { continue; } $node->args[$key] = new Arg(new FuncCall(new Name($arg->value->value), [new VariadicPlaceholder()]), \false, \false, [], $arg->name); $hasChanged = \true; } return $hasChanged ? $node : null; } public function provideMinPhpVersion() : int { return PhpVersion::PHP_81; } }